package com.ruoyi.system.service.impl;

import com.ruoyi.common.core.domain.Ztree;
import com.ruoyi.common.core.text.Convert;
import com.ruoyi.system.domain.CarMenu;
import com.ruoyi.system.mapper.CarMenuMapper;
import com.ruoyi.system.service.ICarMenuService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

/**
 * 车辆信息菜单管理Service业务层处理
 *
 * @author ruoyi
 * @date 2022-03-13
 */
@Service
public class CarMenuServiceImpl implements ICarMenuService {
    @Resource
    private CarMenuMapper carMenuMapper;

    /**
     * 查询车辆信息菜单管理
     *
     * @param menuId 车辆信息菜单管理主键
     * @return 车辆信息菜单管理
     */
    @Override
    public CarMenu selectCarMenuByMenuId(Long menuId) {
        return carMenuMapper.selectCarMenuByMenuId(menuId);
    }

    /**
     * 查询车辆信息菜单管理列表
     *
     * @param carMenu 车辆信息菜单管理
     * @return 车辆信息菜单管理
     */
    @Override
    public List<CarMenu> selectCarMenuList(CarMenu carMenu) {
        return carMenuMapper.selectCarMenuList(carMenu);
    }

    /**
     * 新增车辆信息菜单管理
     *
     * @param carMenu 车辆信息菜单管理
     * @return 结果
     */
    @Override
    public int insertCarMenu(CarMenu carMenu) {
        return carMenuMapper.insertCarMenu(carMenu);
    }

    /**
     * 修改车辆信息菜单管理
     *
     * @param carMenu 车辆信息菜单管理
     * @return 结果
     */
    @Override
    public int updateCarMenu(CarMenu carMenu) {
        return carMenuMapper.updateCarMenu(carMenu);
    }

    /**
     * 批量删除车辆信息菜单管理
     *
     * @param menuIds 需要删除的车辆信息菜单管理主键
     * @return 结果
     */
    @Override
    public int deleteCarMenuByMenuIds(String menuIds) {
        return carMenuMapper.deleteCarMenuByMenuIds(Convert.toStrArray(menuIds));
    }

    /**
     * 删除车辆信息菜单管理信息
     *
     * @param menuId 车辆信息菜单管理主键
     * @return 结果
     */
    @Override
    public int deleteCarMenuByMenuId(Long menuId) {
        return carMenuMapper.deleteCarMenuByMenuId(menuId);
    }

    @Override
    public List<Ztree> selectDeptTree(CarMenu carMenu) {
        List<CarMenu> deptList = carMenuMapper.selectCarMenuList(carMenu).stream().filter(item -> StringUtils.equals(item.getIsDel(), "0")).collect(Collectors.toList());
        List<Ztree> ztrees = initZtree(deptList);
        return ztrees;
    }


    /**
     * 对象转部门树
     *
     * @param deptList 部门列表
     * @return 树结构列表
     */
    public List<Ztree> initZtree(List<CarMenu> deptList) {
        List<Ztree> ztrees = new ArrayList<Ztree>();
        for (CarMenu menu : deptList) {
            Ztree ztree = new Ztree();
            ztrees.add(ztree);
            ztree.setId(menu.getMenuId());
            ztree.setpId(menu.getParentId());
            ztree.setName(menu.getName());
            ztree.setTitle(menu.getName());
            Map<String, Object> map = new HashMap<>();
            ztree.setDiyData(map);
            map.put("url", menu.getUrl());
            map.put("type", menu.getType());
            map.put("busType", menu.getBusType());
            map.put("menuId", menu.getMenuId());
        }
        return ztrees;
    }
}
